package com.wang.tool.proxy;

import com.alibaba.fastjson.JSONObject;

/**
 * 前置切面
 *
 * @Author wangshaopeng
 * @Date 2020/8/5
 */
public abstract class BeforeCut implements Cut {


    @Override
    public final Object invoke(FunctionProxy<Object, Object>.InvokeChain chain, Object param, JSONObject runCtx) {
        //前置逻辑
        before(param, runCtx);
        //实际业务
        return chain.chain(param, runCtx);
    }

    /**
     * 前置操作
     *
     * @param param  入参
     * @param runCtx 执行环境 非空
     */
    protected abstract void before(Object param, JSONObject runCtx);


    @Override
    public final int level() {
        return 8;
    }

}
